diff --git a/src/mms/inc_private/mms_common_internal.h b/src/mms/inc_private/mms_common_internal.h index dd03a924..3d493873 100644 --- a/src/mms/inc_private/mms_common_internal.h +++ b/src/mms/inc_private/mms_common_internal.h @@ -35,18 +35,9 @@ MmsValue* mmsMsg_parseDataElement(Data_t* dataElement); -void -mmsMsg_createFloatData(MmsValue* value, int* size, uint8_t** buf); - Data_t* mmsMsg_createBasicDataElement(MmsValue* value); -Data_t* -mmsMsg_createDataElement(MmsValue* value); - -void -mmsMsg_addResultToResultList(AccessResult_t* accessResult, MmsValue* value); - AccessResult_t** mmsMsg_createAccessResultsList(MmsPdu_t* mmsPdu, int resultsCount); diff --git a/src/mms/iso_mms/common/mms_common_msg.c b/src/mms/iso_mms/common/mms_common_msg.c index 4de9cfca..3feee820 100644 --- a/src/mms/iso_mms/common/mms_common_msg.c +++ b/src/mms/iso_mms/common/mms_common_msg.c @@ -26,7 +26,7 @@ #include "stack_config.h" #include "mms_value_internal.h" -void +static void mmsMsg_createFloatData(MmsValue* value, int* size, uint8_t** buf) { if (value->value.floatingPoint.formatWidth == 64) { @@ -318,271 +318,6 @@ mmsMsg_parseDataElement(Data_t* dataElement) return value; } -Data_t* -mmsMsg_createDataElement(MmsValue* value) -{ - if (value->type == MMS_STRUCTURE) { - Data_t* dataElement = (Data_t*) GLOBAL_CALLOC(1, sizeof(Data_t)); - - dataElement->present = Data_PR_structure; - - int elementCount = value->value.structure.size; - - dataElement->choice.structure = (DataSequence_t*) GLOBAL_CALLOC(1, sizeof(DataSequence_t)); - - dataElement->choice.structure->list.size = elementCount; - dataElement->choice.structure->list.count = elementCount; - - dataElement->choice.structure->list.array = (Data_t**) GLOBAL_CALLOC(elementCount, sizeof(Data_t*)); - - int i; - - for (i = 0; i < elementCount; i++) { - dataElement->choice.structure->list.array[i] = - mmsMsg_createDataElement(value->value.structure.components[i]); - } - - return dataElement; - } - else { - return mmsMsg_createBasicDataElement(value); - } -} - -void -mmsMsg_addResultToResultList(AccessResult_t* accessResult, MmsValue* value) -{ - if (value == NULL) { - accessResult->present = AccessResult_PR_failure; - - asn_long2INTEGER(&accessResult->choice.failure, DataAccessError_objectnonexistent); - - if (DEBUG) - printf("ACCESS ERROR\n"); - } - else { - switch (value->type) { - case MMS_ARRAY: - { - int size = value->value.structure.size; - accessResult->present = AccessResult_PR_array; - accessResult->choice.array.list.count = size; - accessResult->choice.array.list.size = size; - accessResult->choice.array.list.array = (Data_t**) GLOBAL_CALLOC(size, sizeof(Data_t*)); - int i; - for (i = 0; i < size; i++) { - accessResult->choice.array.list.array[i] = - mmsMsg_createDataElement(value->value.structure.components[i]); - } - } - break; - case MMS_STRUCTURE: - { - int size = value->value.structure.size; - accessResult->present = AccessResult_PR_structure; - accessResult->choice.structure.list.count = size; - accessResult->choice.structure.list.size = size; - accessResult->choice.structure.list.array = (Data_t**) GLOBAL_CALLOC(size, sizeof(Data_t*)); - int i; - for (i = 0; i < size; i++) { - accessResult->choice.structure.list.array[i] = - mmsMsg_createDataElement(value->value.structure.components[i]); - } - - } - break; - case MMS_BIT_STRING: - { - accessResult->present = AccessResult_PR_bitstring; - accessResult->choice.bitstring.buf = value->value.bitString.buf; - int size = (value->value.bitString.size / 8) + ((value->value.bitString.size % 8) > 0); - int unused = 8 - (value->value.bitString.size % 8); - accessResult->choice.bitstring.size = size; /* size in bytes */ - accessResult->choice.bitstring.bits_unused = unused; - } - break; - case MMS_BOOLEAN: - accessResult->present = AccessResult_PR_boolean; - accessResult->choice.boolean = value->value.boolean; - break; - case MMS_FLOAT: - accessResult->present = AccessResult_PR_floatingpoint; - - mmsMsg_createFloatData(value, &accessResult->choice.floatingpoint.size, - &accessResult->choice.floatingpoint.buf); - - break; - case MMS_UTC_TIME: - accessResult->present = AccessResult_PR_utctime; - accessResult->choice.utctime.buf = (uint8_t*) GLOBAL_MALLOC(8); - memcpy(accessResult->choice.utctime.buf, value->value.utcTime, 8); - accessResult->choice.utctime.size = 8; - break; - case MMS_INTEGER: - accessResult->present = AccessResult_PR_integer; - asn_long2INTEGER(&accessResult->choice.integer, (long) MmsValue_toInt32(value)); - break; - case MMS_UNSIGNED: - accessResult->present = AccessResult_PR_unsigned; - asn_long2INTEGER(&accessResult->choice.Unsigned, (long) MmsValue_toInt32(value)); - break; - case MMS_VISIBLE_STRING: - accessResult->present = AccessResult_PR_visiblestring; - if (value->value.visibleString.buf == NULL ) - accessResult->choice.visiblestring.size = 0; - else { - accessResult->choice.visiblestring.buf = (uint8_t*) value->value.visibleString.buf; - accessResult->choice.visiblestring.size = strlen(value->value.visibleString.buf); - } - break; - - case MMS_STRING: - accessResult->present = AccessResult_PR_mMSString; - if (value->value.visibleString.buf == NULL ) { - accessResult->choice.mMSString.size = 0; - } - else { - accessResult->choice.mMSString.buf = (uint8_t*) value->value.visibleString.buf; - accessResult->choice.mMSString.size = strlen(value->value.visibleString.buf); - } - break; - - case MMS_BINARY_TIME: - accessResult->present = AccessResult_PR_binarytime; - accessResult->choice.binarytime.size = value->value.binaryTime.size; - accessResult->choice.binarytime.buf = value->value.binaryTime.buf; - break; - - case MMS_OCTET_STRING: - accessResult->present = AccessResult_PR_octetstring; - if (value->value.octetString.buf != NULL ) { - accessResult->choice.octetstring.buf = value->value.octetString.buf; - accessResult->choice.octetstring.size = value->value.octetString.size; - } - else - accessResult->choice.octetstring.size = 0; - break; - - default: - accessResult->present = AccessResult_PR_failure; - - asn_long2INTEGER(&accessResult->choice.failure, DataAccessError_typeinconsistent); - - - - break; - } - } -} - -AccessResult_t** -mmsMsg_createAccessResultsList(MmsPdu_t* mmsPdu, int resultsCount) -{ - ReadResponse_t* readResponse = - &(mmsPdu->choice.confirmedResponsePdu.confirmedServiceResponse.choice.read); - - readResponse->listOfAccessResult.list.size = resultsCount; - readResponse->listOfAccessResult.list.count = resultsCount; - readResponse->listOfAccessResult.list.array = (AccessResult_t**) GLOBAL_CALLOC(resultsCount, sizeof(AccessResult_t*)); - - int i; - - for (i = 0; i < resultsCount; i++) { - readResponse->listOfAccessResult.list.array[i] = (AccessResult_t*) GLOBAL_CALLOC(1, sizeof(AccessResult_t)); - } - - AccessResult_t** accessResultList = readResponse->listOfAccessResult.list.array; - - return accessResultList; -} - -static void -deleteDataElement(Data_t* dataElement) -{ - if (dataElement == NULL ) { - printf("deleteDataElement NULL argument\n"); - return; - } - - if (dataElement->present == Data_PR_structure) { - int elementCount = dataElement->choice.structure->list.count; - - int i; - for (i = 0; i < elementCount; i++) { - deleteDataElement(dataElement->choice.structure->list.array[i]); - } - - GLOBAL_FREEMEM(dataElement->choice.structure->list.array); - GLOBAL_FREEMEM(dataElement->choice.structure); - } - else if (dataElement->present == Data_PR_array) { - int elementCount = dataElement->choice.array->list.count; - - int i; - for (i = 0; i < elementCount; i++) { - deleteDataElement(dataElement->choice.array->list.array[i]); - } - - GLOBAL_FREEMEM(dataElement->choice.array->list.array); - GLOBAL_FREEMEM(dataElement->choice.array); - } - else if (dataElement->present == Data_PR_floatingpoint) { - GLOBAL_FREEMEM(dataElement->choice.floatingpoint.buf); - } - else if (dataElement->present == Data_PR_utctime) { - GLOBAL_FREEMEM(dataElement->choice.utctime.buf); - } - - GLOBAL_FREEMEM(dataElement); -} - -void -mmsMsg_deleteAccessResultList(AccessResult_t** accessResult, int variableCount) -{ - int i; - - for (i = 0; i < variableCount; i++) { - - if (accessResult[i]->present == AccessResult_PR_structure) { - int elementCount = accessResult[i]->choice.structure.list.count; - - int j; - - for (j = 0; j < elementCount; j++) { - deleteDataElement(accessResult[i]->choice.structure.list.array[j]); - } - - GLOBAL_FREEMEM(accessResult[i]->choice.structure.list.array); - } - else if (accessResult[i]->present == AccessResult_PR_array) { - int elementCount = accessResult[i]->choice.array.list.count; - - int j; - - for (j = 0; j < elementCount; j++) { - deleteDataElement(accessResult[i]->choice.array.list.array[j]); - } - - GLOBAL_FREEMEM(accessResult[i]->choice.array.list.array); - } - else if (accessResult[i]->present == AccessResult_PR_integer) - GLOBAL_FREEMEM(accessResult[i]->choice.integer.buf); - else if (accessResult[i]->present == AccessResult_PR_unsigned) - GLOBAL_FREEMEM(accessResult[i]->choice.Unsigned.buf); - else if (accessResult[i]->present == AccessResult_PR_floatingpoint) - GLOBAL_FREEMEM(accessResult[i]->choice.floatingpoint.buf); - else if (accessResult[i]->present == AccessResult_PR_utctime) - GLOBAL_FREEMEM(accessResult[i]->choice.utctime.buf); - else if (accessResult[i]->present == AccessResult_PR_failure) - GLOBAL_FREEMEM(accessResult[i]->choice.failure.buf); - - GLOBAL_FREEMEM(accessResult[i]); - } - - GLOBAL_FREEMEM(accessResult); -} - - char* mmsMsg_createStringFromAsnIdentifier(Identifier_t identifier) {